import Vue from 'vue'
import App from './App.vue'
import router from './router'
import store from './store'

// 导入vant
// vant是默认导入，Lazyload是按需导入
// eslint要求：同一个功能包下的不同模块对象要使用一个语句导入进来
// 注意：默认导入在前，按需导入在后
// 默认，按需同时导入  import xxx,{yyy,zzz,kkk} from '模块'
import Vant, { Lazyload } from 'vant'
import 'vant/lib/index.css'

// rem适配基准值，相关依赖包导入
import 'amfe-flexible/index.min.js'

// 引入全局的自定义样式，必须在vant样式之后，因为要覆盖vant的样式
import '@/assets/css/global.less'

// 导入vee-valitade规则文件
// 本质：就是validate.js文件内容在该处执行
import '@/utils/validate.js'

// 导入全局的过滤器
import * as filters from '@/utils/filters/index.js' // 过滤器

// 注册全局过滤器
Object.keys(filters).forEach(key => {
  // console.log(Object.keys(filters))  // 结果是：数组
  Vue.filter(key, filters[key])
})

Vue.use(Vant)

// 对Lazyload指令做注册
Vue.use(Lazyload)

// 设置一个全局的延迟器,是Vue的继承成员。名称为$sleep，是自定义的
// time：形参，表示等待的时间，毫秒
Vue.prototype.$sleep = (time) => {
  // Promise对象返回，应用端可以介入await，这样异步过程变为同步过程，可以保证当前代码没有执行完毕的话，后面的代码不会执行
  return new Promise((resolve) => {
    window.setTimeout(() => {
      resolve() // 是空的执行，没有实际意义
    }, time)
  })
}

Vue.config.productionTip = false

new Vue({
  router,
  store,
  render: h => h(App)
}).$mount('#app')

// 以下代码的作用是：使得手机物理返回按键针对app应用生效
// 在main.js中添加如下代码  此代码是采用的 5+ Runtime中的plus对象
document.addEventListener('plusready', function () {
  var webview = window.plus.webview.currentWebview()
  window.plus.key.addEventListener('backbutton', function () {
    webview.canBack(function (e) {
      if (e.canBack) {
        webview.back()
      } else {
        // webview.close(); //hide,quit
        // plus.runtime.quit();
        // 首页返回键处理
        // 处理逻辑：1秒内，连续两次按返回键，则退出应用；
        var first = null
        window.plus.key.addEventListener('backbutton', function () {
          // 首次按键，提示‘再按一次退出应用’
          if (!first) {
            first = new Date().getTime()
            setTimeout(function () {
              first = null
            }, 1000)
          } else {
            if (new Date().getTime() - first < 1500) {
              window.plus.runtime.quit()
            }
          }
        }, false)
      }
    })
  })
})
